/*
 * Options.cpp
 *
 *  Created on: 2012-03-05
 *      Author: naster
 */

#include "Options.h"

using namespace std;

Options::Options() {
	thread_opc = SDL_CreateThread(GetOptions, (void*) this);

}

Options::~Options() {
	SDL_KillThread(thread_opc);
}

void Options::PutOption(char * str) {
	opt.push(str);
}

char* Options::GetOption() {
	if (opt.empty())
		return NULL;
	char * ptr = opt.front();
	opt.pop();
	return ptr;
}

void Options::Process() {
	char * buf = GetOption();
	if (buf != NULL) {
		if (strcmp(buf, "exit") == 0) {
			SDL_Event quit;
			quit.type = SDL_QUIT;
			SDL_PushEvent(&quit);
		}
		else if (strcmp(buf, "fps") == 0)
			fps = !fps;
		else if (strcmp(buf, "mouse") == 0)
			mouse = !mouse;
		else if (strcmp(buf, "speed") == 0) {
			cin >> maxSpeed;
			cout << "Określono maksymalną szybkość robota na " << maxSpeed << endl;
		}
		else if(strcmp(buf, "engine") == 0) {
			engine = !engine;
		}
		else if(strcmp(buf, "help") == 0) {
			cout << "Podstawowe komendy" << endl;
			cout << "help - wyświetlenie poniższego helpa" << endl;
			cout << "fps - pokazanie ilości klatek obrazu przechwyconej z kamerki na sekunde" << endl;
			cout << "mouse - ukazanie względnego przesunięcia kamery myszki (i kamery)" << endl;
			cout << "speed liczba - liczba z przedziału 0 - 100 określająca maksymalną prędkość robota" << endl;
		}
		SDL_Event refresh;
		refresh.type = SDL_USEREVENT;
		SDL_PushEvent(&refresh);
	}
	return;
}

int GetOptions(void * data) {
	char * buf;
	Options * opt = (Options*) data;
	cout << "Wprowadź opcje do modyfikacji" << endl;
	while (1) {
		opt->Process();
		buf = new char[50];
		cin >> buf;
		opt->PutOption(buf);
	}
	return 0;
}
